import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.CallableStatement;
import java.sql.Types;

public class test_jdbc_record_nettime_case0011 {
    private static String sourceURL;
    public static Connection GetConnection(String username, String passwd) {
        Connection conn = null;
        try {
            //创建数据库连接。
            conn = DriverManager.getConnection(sourceURL, username, passwd);
            System.out.println("Connection succeed!");
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

        return conn;
    };

    //执行普通SQL语句，创建t_jdbc_record_nettime_case0011表。
    public static void CreateTable(Connection conn) {
        Statement stmt = null;
        try {
            stmt = conn.createStatement();

            //执行普通SQL语句。
            int rc = stmt
                    .executeUpdate("create table t_jdbc_record_nettime_case0011(c_customer_sk integer, c_customer_name varchar(32));");

            stmt.close();
        } catch (SQLException e) {
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            }
            e.printStackTrace();
        }
    }

    //执行预处理语句，批量插入数据。
    public static void BatchInsertData(Connection conn) {
        PreparedStatement pst = null;

        try {
            //生成预处理语句。
            pst = conn.prepareStatement("insert into t_jdbc_record_nettime_case0011 values (?,?)");
            for (int i = 0; i < 100; i++) {
                //添加参数。
                pst.setInt(1, i);
                pst.setString(2, "data " + i);
                int ins = pst.executeUpdate();
            }
            //执行批处理。
            //pst.executeBatch();
            pst.close();
        } catch (SQLException e) {
            if (pst != null) {
                try {
                    pst.close();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            }
            e.printStackTrace();
        }
    }

    //执行预编译语句，更新数据。
    public static void ExecPreparedSQL(Connection conn) {
        PreparedStatement pstmt = null;
        try {
            pstmt = conn
                    .prepareStatement("update t_jdbc_record_nettime_case0011 set c_customer_name = ? where c_customer_sk = 1");
            pstmt.setString(1, "new Data");
            int rowcount = pstmt.executeUpdate();
            pstmt.close();
        } catch (SQLException e) {
            if (pstmt != null) {
                try {
                    pstmt.close();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            }
            e.printStackTrace();
        }
    }

    //执行普通SQL语句，删除t_jdbc_record_nettime_case0011表。
    public static void DropTable(Connection conn) {
        Statement dstmt = null;
        try {
            dstmt = conn.createStatement();

            //执行普通SQL语句。
            int rc = dstmt
                    .executeUpdate("drop table t_jdbc_record_nettime_case0011 cascade;");

            dstmt.close();
        } catch (SQLException e) {
            if (dstmt != null) {
                try {
                    dstmt.close();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            }
            e.printStackTrace();
        }
    }


    /**
     * 主程序，逐步调用各静态方法。
     * @param args
     */
    public static void main(String[] args) {
        sourceURL = "jdbc:postgresql://" + args[0] + "/" + args[1];
        //创建数据库连接。
        Connection conn = GetConnection(args[2], args[3]);

        //创建表。
        CreateTable(conn);

        //批插数据。
        BatchInsertData(conn);

        //执行预编译语句，更新数据。
        ExecPreparedSQL(conn);

        //删除表
        DropTable(conn);

        //关闭数据库连接。
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

}
